<!-- 我的弹窗 -->

<template>
  <WebModal small>
    <WebForm class="LightMode-MyModal">
      <FormInput label="模式名称" bind="name" :max="6" required />

      <FormSelectMulti label="回路" bind="deviceId" :dict="circuit_selectDict" join hasRight required />

      <EasyRow flex>
        <FormInput label="执行条件" bind="cron" :check="checkCron" lazy required @change="changeCron" />

        <FormSlot bind="analyze" tip="请解析" noLabel flex0 required>
          <BtnPrimary title="解析" :disabled="!one.cron" @click="toAnalyze" />
        </FormSlot>
      </EasyRow>
      <FormSlot isTip>Seconds Minutes Hours DayofMonth Month DayofWeek Year</FormSlot>

      <FormSlot label="最近十次">
        <div v-for="i of 5" :key="i">
          <div class="LightMode-MyModal-time half">
            <b>{{ i }}</b>
            <span>{{ one.times[i - 1] }}</span>
          </div>
          <div class="LightMode-MyModal-time half">
            <b>{{ i + 5 }}</b>
            <span>{{ one.times[i + 4] }}</span>
          </div>
        </div>
      </FormSlot>

      <FormRadio label="执行动作" bind="action" :dict="DICT.ACTION" initFirst />
      <FormStatus initFirst isRadio />
    </WebForm>
  </WebModal>
</template>

<script>
// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'MyModal',

  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [CORE.mixWeb(), CORE.mixSelect('circuit', 'circuit_')],

  /**
   * 组件导入 (Abc.vue + Abc/index.vue)
   */
  ...CORE.components(require.context('./', true, /vue$/)),

  /**
   * 监听属性 (深度 deep 首次 immediate)
   */
  watch: {
    /**
     * 监听解析就绪
     */
    readyOne(ready) {
      ready && this.refForm && this.refForm.check('cron')
    },
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 点击解析
     */
    toAnalyze() {
      Object.assign(this.one, {
        analyze: 'ready', // 解析
        times: [], // 最近 10 次执行时间
        errMsg: '', // 无效提示语
      })
      this.startOne()
    },

    /**
     * 修改表达式
     */
    changeCron(value) {
      Object.assign(this.one, {
        analyze: value ? '' : 'ready', // 解析
        times: [], // 最近 10 次执行时间
        errMsg: '', // 无效提示语
      })
      value && this.toAnalyze()
    },

    /**
     * 检查表达式
     */
    checkCron() {
      const { analyze, errMsg } = this.one
      return analyze && errMsg ? errMsg : ''
    },
  },
}
</script>

<style lang="scss">
@import './index.scss';
</style>
